/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ufes.gpf.sgm.command.incluirMandado;

import edu.ufes.gpf.sgm.command.ICommand;
import edu.ufes.gpf.sgm.model.Mandado;
import edu.ufes.gpf.sgm.model.Pessoa;
import edu.ufes.gpf.sgm.model.TipoMandado;
import edu.ufes.gpf.sgm.presenter.IncluirMandadoPresenter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.JOptionPane;

/**
 *
 * @author Danilo
 */
public abstract class AbstractCommandMandado implements ICommand
{

    protected IncluirMandadoPresenter receptor;

    public AbstractCommandMandado(IncluirMandadoPresenter receptor)
    {
        this.receptor = receptor;
    }

    protected void valida() throws IOException, Exception
    {
        SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd");
        Date data, data2;

        if (receptor.getView().getTxtNumPessoal().getText().equals(""))
        {
            JOptionPane.showMessageDialog(null, "Campo Número pessoal Vazio!");

        } else if (receptor.getView().getTxtNumAutos().getText().equals(""))
        {
            JOptionPane.showMessageDialog(null, "Campo Número dos autos Vazio!");

        } else if (receptor.getView().getTxtNumCentral().getText().equals(""))
        {
            JOptionPane.showMessageDialog(null, "Campo Número da Central Vazio!");

        } else if (receptor.getView().getTxtDataRecebimento().getText().equals(""))
        {
            JOptionPane.showMessageDialog(null, "Campo Data de recebimento Vazio!");

        } else if (receptor.getView().getCbmTipoMandado().getSelectedIndex() == 0)
        {
            JOptionPane.showMessageDialog(null, "Campo Tipo de Mandado Não Selecionado!");

        } else
        {

            ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();
            int[] linhas = receptor.getView().getTblPessoas().getSelectedRows();
            for (int i = 0; i < linhas.length; i++)
            {
                pessoas.add(receptor.getPessoas().buscarPorId(Integer.parseInt(receptor.getView().getTblPessoas().getValueAt(i, 0).toString())));
            }
            //String teste = "2000-10-10";
            //data = new Date(teste);
            data = new Date(receptor.getView().getTxtDataDistribuicao().getText());
            data2 = new Date(receptor.getView().getTxtDataRecebimento().getText());

            Mandado mandado = new Mandado(Integer.parseInt(receptor.getView().getTxtNumPessoal().getText()),
                    Integer.parseInt(receptor.getView().getTxtNumCentral().getText()), Integer.parseInt(receptor.getView().getTxtNumAutos().getText()),
                    df.format(data), df.format(data2),
                    new TipoMandado(receptor.getView().getCbmTipoMandado().getSelectedItem().toString(), "Teste"));            
            mandado.setPessoas(pessoas);
            if (salva(mandado))
            {
                JOptionPane.showMessageDialog(receptor.getView(), "Mandado já existente");

            } else
            {
                receptor.setMandado(mandado);
                JOptionPane.showMessageDialog(receptor.getView(), receptor.getView().getTxtNumAutos().getText() + " Cadastrado com sucesso!");

            }

        }
    }

    protected abstract boolean salva(Mandado mandado) throws IOException;

}
